package com.yehongyu.mytools.ui.awt;

//: MenuNew.java
//Menus in Java 1.1
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.CheckboxMenuItem;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.MenuShortcut;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class MenuNew extends Frame {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	String[] flavors = { "Chocolate", "Strawberry", "Vanilla Fudge Swirl",
			"Mint Chip", "Mocha Almond Fudge", "Rum Raisin", "Praline Cream",
			"Mud Pie" };

	TextField t = new TextField("No flavor", 30);

	MenuBar mb1 = new MenuBar();

	Menu f = new Menu("File");

	Menu m = new Menu("Flavors");

	Menu s = new Menu("Safety");

	// Alternative approach:
	CheckboxMenuItem[] safety = { new CheckboxMenuItem("Guard"),
			new CheckboxMenuItem("Hide") };

	MenuItem[] file = {
	// No menu shortcut:
			new MenuItem("Open"),
			// Adding a menu shortcut is very simple:
			new MenuItem("Exit", new MenuShortcut(KeyEvent.VK_E)) };

	// A second menu bar to swap to:
	MenuBar mb2 = new MenuBar();

	Menu fooBar = new Menu("fooBar");

	MenuItem[] other = { new MenuItem("Foo"), new MenuItem("Bar"),
			new MenuItem("Baz"), };
	// Initialization code:
	{
		ML ml = new ML();
		CMIL cmil = new CMIL();
		safety[0].setActionCommand("Guard");
		safety[0].addItemListener(cmil);
		safety[1].setActionCommand("Hide");
		safety[1].addItemListener(cmil);
		file[0].setActionCommand("Open");
		file[0].addActionListener(ml);
		file[1].setActionCommand("Exit");
		file[1].addActionListener(ml);
		other[0].addActionListener(new FooL());
		other[1].addActionListener(new BarL());
		other[2].addActionListener(new BazL());
	}

	Button b = new Button("Swap Menus");

	public MenuNew() {
		FL fl = new FL();
		for (int i = 0; i < flavors.length; i++) {
			MenuItem mi = new MenuItem(flavors[i]);
			mi.addActionListener(fl);
			m.add(mi);
			// Add separators at intervals:
			if ((i + 1) % 3 == 0)
				m.addSeparator();
		}
		for (int i = 0; i < safety.length; i++)
			s.add(safety[i]);
		f.add(s);
		for (int i = 0; i < file.length; i++)
			f.add(file[i]);
		mb1.add(f);
		mb1.add(m);
		setMenuBar(mb1);
		t.setEditable(false);
		add(t, BorderLayout.CENTER);
		// Set up the system for swapping menus:
		b.addActionListener(new BL());
		add(b, BorderLayout.NORTH);
		for (int i = 0; i < other.length; i++)
			fooBar.add(other[i]);
		mb2.add(fooBar);
	}

	class BL implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			MenuBar m = getMenuBar();
			if (m == mb1)
				setMenuBar(mb2);
			else if (m == mb2)
				setMenuBar(mb1);
		}
	}

	class ML implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			MenuItem target = (MenuItem) e.getSource();
			String actionCommand = target.getActionCommand();
			if (actionCommand.equals("Open")) {
				String s = t.getText();
				boolean chosen = false;
				for (int i = 0; i < flavors.length; i++)
					if (s.equals(flavors[i]))
						chosen = true;
				if (!chosen)
					t.setText("Choose a flavor first!");
				else
					t.setText("Opening " + s + ". Mmm, mm!");
			} else if (actionCommand.equals("Exit")) {
				dispatchEvent(new WindowEvent(MenuNew.this,
						WindowEvent.WINDOW_CLOSING));
			}
		}
	}

	class FL implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			MenuItem target = (MenuItem) e.getSource();
			t.setText(target.getLabel());
		}
	}

	// Alternatively, you can create a different
	// class for each different MenuItem. Then you
	// Don't have to figure out which one it is:
	class FooL implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			t.setText("Foo selected");
		}
	}

	class BarL implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			t.setText("Bar selected");
		}
	}

	class BazL implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			t.setText("Baz selected");
		}
	}

	class CMIL implements ItemListener {
		public void itemStateChanged(ItemEvent e) {
			CheckboxMenuItem target = (CheckboxMenuItem) e.getSource();
			String actionCommand = target.getActionCommand();
			if (actionCommand.equals("Guard"))
				t.setText("Guard the Ice Cream! " + "Guarding is "
						+ target.getState());
			else if (actionCommand.equals("Hide"))
				t.setText("Hide the Ice Cream! " + "Is it cold? "
						+ target.getState());
		}
	}

	public static void main(String[] args) {
		MenuNew f = new MenuNew();
		f.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		f.setSize(300, 200);
		f.setVisible(true);
	}
} // /:~
